package com.aco.fatureapp.utilitary;

import android.app.ProgressDialog;
import android.content.Context;

import com.aco.fatureapp.utilitary.CallAsyncTask.Action;

/**
 * Executar um processamento dentro de uma thread, sem travar a tela.
 *
 * @author aldivone
 *
 */
public class CallAsyncTask extends android.os.AsyncTask<Action, Void, String> {
	ProgressDialog mProgressDialog;
	private Context mContext;

	private boolean mShowMessageSucess;

	private String mMessageSucess;

	public CallAsyncTask(Context mContext, boolean showMessageSucess) {
		super();
		this.mContext = mContext;
		this.mShowMessageSucess = showMessageSucess;
	}

	@Override
	protected String doInBackground(Action... params) {
		try {
			if (params != null) {

				if (params[0] != null) {
					Action action = params[0];

					String retorno = action.execute();

					if (retorno != null) {
						mShowMessageSucess = false;
						return retorno;
					}
				}

			}

			return null;
		}
		catch (Exception ex) {

			mShowMessageSucess = false;
			return ex.getMessage();
		}
	}

	@Override
	protected void onPreExecute() {
		mProgressDialog = new ProgressDialog(mContext);
		mProgressDialog.setTitle("iFature Mobile");
		mProgressDialog.setMessage("Aguarde, executando sua solicitação.");
		mProgressDialog.setCancelable(false);
		mProgressDialog.show();
	}

	@Override
	protected void onPostExecute(String result) {
		mProgressDialog.dismiss();

		if (result != null) {
			Utils.alert(mContext,
					"Erro no processamento da solicitação. \n Detalhes: "
							+ result, null);
			return;
		}

		if (mShowMessageSucess) {
			if (getmMessageSucess() != null) {
				Utils.alert(mContext, getmMessageSucess(), null);
			}
			else {
				Utils.alert(mContext,
						"Processamento da solicitação concluído com sucesso.",
						null);
			}
		}
	}

	public String getmMessageSucess() {
		return mMessageSucess;
	}

	public void setmMessageSucess(String mMessageSucess) {
		this.mMessageSucess = mMessageSucess;
	}

	public interface Action {
		String execute();
	}
}
